//
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// //////////////////////////////////////////////////////////////////////////////

package org.munoz.shared;

import java.util.Comparator;

/**
 * Specification of the rank values for a standard deck of cards. 
 */

public enum Rank {
	ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING;
  
  public static final Rank[] VALUES = values();
  
  public static final Comparator<Rank> ACE_LOW_COMPARATOR = new Comparator<Rank>() {    
    @Override
    public int compare(Rank o1, Rank o2) {
      int ord1 = o1 == ACE ? -1 : o1.ordinal();
      int ord2 = o2 == ACE ? -1 : o2.ordinal();
      return ord1 - ord2;
    }
  };
    
  public static final Comparator<Rank> TWO_HIGH_COMPARATOR = new Comparator<Rank>() {    
    @Override
    public int compare(Rank o1, Rank o2) {
      int ord1 = o1 == TWO ? 13 : o1.ordinal();
      int ord2 = o2 == TWO ? 13 : o2.ordinal();
      return ord1 - ord2;
    }
  };
  
  public Rank getNext() {
    if (this == VALUES[VALUES.length - 1]) {
      return VALUES[0];      
    }
    return values()[ordinal() + 1];
  }

  public Rank getPrev() {
    if (this == VALUES[0]) {
      return VALUES[VALUES.length - 1];      
    }
    return values()[ordinal() - 1];
  }
}
